package com.alipay.util;

import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

/**
 * 功能：外部解析XML文件类（此类不是支付宝所有，也可以使用其他方法解析） 类属性：非支付宝解析类 公司名称：alipay 修改时间：2008-10-10
 * */
public class Dom4jXMLParse {
	String filepath = "";

	public String DomXml(String filepath) throws Exception {

		SAXReader reader = new SAXReader();
		Document doc = reader.read(new URL(filepath).openStream());
		// 解析request列表下的信息
		List<Node> nodeList = doc.selectNodes("//request/*");
		StringBuffer buf = new StringBuffer();

		for (Node node : nodeList) {
			buf.append(node.getName()).append("=").append(node.getText());
		}
		// 解析response列表下的订单信息
		List<Node> nodeList1 = doc.selectNodes("//response/trade/*");
		StringBuffer buf1 = new StringBuffer();
		for (Node node : nodeList1) {
		
			// 截取部分不需要解析的信息
			if (!node.getName().equals("flag_trade_locked")
					&& !node.getName().equals("use_coupon")) {
				// 将解析后的数据存入字符流
				buf1.append(node.getName()).append("=").append(node.getText());
				
			}
		}
	
		return "request信息：" + buf.toString() + "response信息：" + buf1.toString();

	}

	/**
	 *将xml或者一个远程的url请求结果转成map
	 * @param filepath	xml或者一个远程的url请求
	 * @return
	 * @throws Exception
	 */
	public Map urlXml2Map(String filepath) throws Exception {

		Map map = new HashMap<String, String>();
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new URL(filepath).openStream());
		
		
		Element root = doc.getRootElement();
		Element ec = (Element)root.selectSingleNode("//is_success"); //查找根元素下的第一个 is_success 节点 
		 System.out.println(ec.getTextTrim()); 
		 
		
		// 解析request列表下的信息
		List<Node> nodeList = doc.selectNodes("//request/*");
		for (Node node : nodeList) {
			map.put(node.getName(), node.getText());
		}
		// 解析response列表下的订单信息
		List<Node> nodeList1 = doc.selectNodes("//response/trade/*");
	
		for (Node node : nodeList1) {
			map.put(node.getName(), node.getText());		
		}

		return map;

	}
	
		

	public static void main(String[] args) throws Exception {
		/*
		 * Dom4jXMLParse dom = new Dom4jXMLParse(); String sss = dom .dd(
		 * "https://www.alipay.com/cooperate/gateway.do?service=single_trade_query&partner=2088002029290264&_input_charset=utf-8&out_trade_no=237&sign=abaab98dbff75a3712ec7a69e295a80b&sign_type=MD5"
		 * ); System.out.println(sss);
		 */

	}
	
	
	
	
}
